package com.wyl.niupi.framework.util.controller;

import com.wyl.niupi.framework.util.codeset.vo.CodesetVo;
import com.wyl.niupi.framework.vo.ResponseVo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.Map;


/**
 * 增强BaseController，<b>可以放普遍的业务方法</b>
 *
 * @author 吴宇亮 2019年1月5日
 */
public class BaseController {

    public static SimpleDateFormat sdf_date = new SimpleDateFormat("yyyy-MM-dd");
    public static SimpleDateFormat sdf_dateTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    public static final transient Logger log = LoggerFactory.getLogger(BaseController.class);

    /************************************** 代码集 **************************************/
    /**
     * <b>缓存代码集，使用时注意NPE，如果获取不存在的代码集，将会返回null。</b><br/><br/>
     *
     * 使用示例： <br/>
     * System.out.println(BaseController.CODE.get("sex").getValue()); //输出性别 <br/>
     * System.out.println(BaseController.CODE.get("性别").getValue()); //输出sex <br/>
     *
     * System.out.println(BaseController.CODE.get("sex").get("1")); //输出男 <br/>
     * System.out.println(BaseController.CODE.get("sex").get("男")); //输出1 <br/>
     * System.out.println(BaseController.CODE.get("性别").get("1")); //输出男 <br/>
     * System.out.println(BaseController.CODE.get("性别").get("男")); //输出1 <br/>
     *
     * System.out.println(BaseController.CODE.get("sex").get("2")); //输出女 <br/>
     * System.out.println(BaseController.CODE.get("sex").get("女")); //输出2 <br/>
     * System.out.println(BaseController.CODE.get("性别").get("2")); //输出女 <br/>
     * System.out.println(BaseController.CODE.get("性别").get("女")); //输出2 <br/>
     */
    public static final Map<String, CodesetVo> CODE = new HashMap<>(500);


    /**
     * 用于权限过滤，普通用户自己只能看自己的数据。
     *
     * @param filter
     * @param fieldName 要过滤的字段名
     * @author 吴宇亮
     * @date 2019年1月18日
     */
	/*public void filterByUser(QueryFilter filter, String fieldName) {
		//普通用户只能看自己的
		String roleid = AppUtil.getRoleid();
		if(!Const.ROLE1.equals(roleid)){
			filter.addFilter("Q_"+fieldName+"_N_EQ", AppUtil.getUserId()+"");
		}
	}*/

    /**
     * 用于app的权限过滤，普通用户自己只能看自己的数据。
     *
     * @param filter
     * @param fieldName 要过滤的字段名`
     * @param userlid app传来的userlid
     * @author 吴宇亮
     * @date 2019年1月18日
     */
	/*public void filterByUser(QueryFilter filter, String fieldName, String userlid) {
		//普通用户只能看自己的
		Users user = userService.get(Integer.valueOf(userlid));
		if(!Const.ROLE1.equals(user.getRolelid())){
			filter.addFilter("Q_"+fieldName+"_N_EQ", userlid);
		}
	}*/

    /************************************** 前端响应 **************************************/
    /**
     * 响应前端，操作成功
     */
    protected ResponseVo sendSuccess() {
        return sendSuccess(null);
    }

    /**
     * 响应前端，操作成功
     */
    protected ResponseVo sendSuccess(String msg, ResponseVo.LayerType tipsType) {
        ResponseVo result = new ResponseVo();
        result.setCode(ResponseVo.Code.SUCCESS.getCode());
        result.setMsg(msg);
        result.setLayerType(tipsType);
        return result;
    }

    /**
     * 响应前端，操作成功
     */
    protected ResponseVo sendSuccess(Object data) {
        ResponseVo result = new ResponseVo();
        result.setData(data);
        result.setCode(ResponseVo.Code.SUCCESS.getCode());
        result.setMsg("操作成功");
        return result;
    }

    /**
     * 响应前端，操作失败
     */
    protected ResponseVo sendFail() {
        return sendFail("操作失败");
    }

    /**
     * 响应前端，操作失败
     */
    protected ResponseVo sendFail(String msg) {
        return sendFail(msg, ResponseVo.LayerType.MSG);
    }

    /**
     * 响应前端，操作失败。并指定前端弹出的提示框，是msg、alert还是confirm等
     *
     * @param msg 消息内容
     * @param tipsType 前端弹出的提示框类型
     * @author 吴宇亮 2019年1月24日
     */
    protected ResponseVo sendFail(String msg, ResponseVo.LayerType tipsType) {
        ResponseVo result = new ResponseVo();
        result.setCode(ResponseVo.Code.FAIL.getCode());
        result.setMsg(msg);
        result.setLayerType(tipsType);
        return result;
    }

    /**
     * 响应前端，后台报错
     */
    protected ResponseVo sendError() {
        ResponseVo result = new ResponseVo();
        result.setCode(ResponseVo.Code.FAIL.getCode());
        result.setMsg("操作失败");
        return result;
    }

    /**
     * 响应前端，后台报错
     */
    protected ResponseVo sendError(String msg) {
        ResponseVo result = new ResponseVo();
        result.setCode(ResponseVo.Code.ERROR.getCode());
        result.setMsg(msg);
        return result;
    }




}

























